package org.example;

import java.math.BigDecimal;

/**
 * 有一家超市，出售苹果和草莓。其中苹果 8 元/斤，草莓 13 元/斤。
 * 现在顾客 A 在超市购买了若干斤苹果和草莓，需要计算一共多少钱？
 * 请编写函数，对于 A 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。
 * <p>
 * 要求
 * 请使用面向对象的思路进行程序编写。
 * 需在程序中，验证函数计算结果的正确性。
 * <p>
 * 提示
 * 顾客购买的水果斤数，可自行确定。无论数值为多少，均需验证程序计算结果的正确性。
 * 可以编写多个函数分别实现，也可以只编写一个函数实现，方式不限。
 */
public class BuyFruitQuestionOne {
    public static void main(String[] args) {
        // 初始化商品
//        Fruit apple = new Fruit("苹果", new BigDecimal(8));
//        Fruit strawberry = new Fruit("草莓", new BigDecimal(13));

//        Fruit apple = new Apple();         // 苹果 8 元/斤
//        Fruit strawberry = new Strawberry(); // 草莓 13 元/斤

        // 使用工厂创建商品
//        Fruit apple = FruitFactory.createFruit("苹果");
//        Fruit strawberry = FruitFactory.createFruit("草莓");

        // 使用枚举 + 工厂创建商品
        Fruit apple = FruitFactory.createFruit(FruitEnum.APPLE);
        Fruit strawberry = FruitFactory.createFruit(FruitEnum.STRAWBERRY);

        // 创建购物车并添加商品
        ShoppingCart cart = new ShoppingCart();
        cart.addItem(apple, 3);      // 购买3斤苹果
        cart.addItem(strawberry, 2); // 购买2斤草莓

        // 计算总价
        BigDecimal totalPrice = cart.calculateTotalPrice();

        // 验证计算结果
        boolean isCorrect = cart.verifyTotalPrice();

        // 输出结果
        System.out.println("顾客A购买了:");
        cart.getItems().forEach((fruit, quantity) -> {
            System.out.printf("%s x %d斤\n", fruit.getName(), quantity);
        });
        System.out.printf("总价计算结果: %.2f元\n", totalPrice);
        System.out.println("验证结果: " + (isCorrect ? "正确" : "错误"));
        System.out.printf("手动验证: %.2f元\n", new BigDecimal(8 * 3 + 13 * 2));
    }

}
